// import com.alibaba.druid.sql.ast.SQLDataType;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.SQLParameter;
// import com.alibaba.druid.sql.ast.statement.SQLCreateStatement;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "OracleStatementImpl.h"
#include "../../../../ast/statement/SQLCreateStatement.h"

class OracleCreateTypeStatement
    : virtual public OracleStatementImpl,
      virtual public SQLCreateStatement
{
public:
  BOOL_ptr orReplace;
  SQLName_ptr name;
  SQLName_ptr authId;
  BOOL_ptr force;
  SQLName_ptr oid;
  BOOL_ptr body;
  BOOL_ptr object;
  BOOL_ptr paren;
  BOOL_ptr isFinal;
  BOOL_ptr instantiable;

  SQLName_ptr under;

  SQLParameter_list_ptr parameters;

  SQLDataType_ptr tableOf;

  SQLExpr_ptr varraySizeLimit;
  SQLDataType_ptr varrayDataType;

  string_ptr wrappedSource;

  OracleCreateTypeStatement();
  SHAREDOBJECT(OracleCreateTypeStatement);

  // @Override
  void accept0(OracleASTVisitor_ptr visitor);

  SQLName_ptr getName();

  void setName(SQLName_ptr name);

  BOOL_ptr isOrReplace();

  void setOrReplace(BOOL_ptr orReplace);

  BOOL_ptr isForce();

  void setForce(BOOL_ptr force);

  SQLName_ptr getOid();

  void setOid(SQLName_ptr x);

  SQLName_ptr getAuthId();

  void setAuthId(SQLName_ptr x);

  SQLParameter_list_ptr getParameters();

  BOOL_ptr isBody();

  void setBody(BOOL_ptr body);

  BOOL_ptr getFinal();

  void setFinal(BOOL_ptr aFinal);

  BOOL_ptr getInstantiable();

  void setInstantiable(BOOL_ptr instantiable);

  SQLDataType_ptr getTableOf();

  void setTableOf(SQLDataType_ptr x);

  SQLExpr_ptr getVarraySizeLimit();

  void setVarraySizeLimit(SQLExpr_ptr x);

  SQLDataType_ptr getVarrayDataType();

  void setVarrayDataType(SQLDataType_ptr x);

  SQLName_ptr getUnder();

  void setUnder(SQLName_ptr x);

  BOOL_ptr isObject();

  void setObject(BOOL_ptr object);

  BOOL_ptr isParen();

  void setParen(BOOL_ptr paren);

  string_ptr getWrappedSource();

  void setWrappedSource(string_ptr wrappedSource);
};
